/**
 * @brief 基础的window窗口
 * 
 * @file SDLWindow.h
 * @author zpq
 * @date 2018-09-23
 */
#ifndef __SDLWINDOW_H_
#define __SDLWINDOW_H_

#include "SDL2/SDL.h"
#include <iostream>
#include "SDL2/SDL_ttf.h"
#include "SDL2/SDL_image.h"
#include <stdexcept>
#include <string>
#include <vector>
#include "SDLTool.h"
#include "SDLBase.h"

using namespace std;

class SDLWindow: public SDLBase
{
private:
    SDL_Window *window;
    SDL_Renderer *renderer;
    SDL_Event event;
    int frameRate;
    int startFrameTime;
    int endFrameTime;
    int frameCount;
    int frameRateStartTime;  //记录帧率的开始
    vector<SDLBase*> sdlBaseList;
    int window_width;       /**< 窗口的宽 */
    int window_height;      /**< 窗口的高 */

    /**
     * @brief 将背景绘制到窗口上
     * 
     */
    void drawBackground();

public:
    bool isExit;

    SDLWindow(string title, int width, int height);
    ~SDLWindow();
    
    /**
     * @brief 清空图像
     * 
     */
    void clear();

    /**
     * @brief 显示图像
     * 
     */
    void show();

    /**
     * @brief 获取window
     * 
     * @return SDL_Window* : 此window使用的window
     */
    SDL_Window *getSDLWindow();

    /**
     * @brief 获取Render
     * 
     * @return SDL_Renderer* : 此window使用的Render
     */
    SDL_Renderer *getSDLRender();


    /**
     * @brief 添加控件到队列中
     * 
     */
    void addSDLBase(SDLBase *sdlBase);

    /**
     * @brief 处理按键
     * 
     * @param event ： 传递过来的事件
     */
    void handleEvent(SDL_Event event);

    /**
     * @brief 设置窗口位置
     * 
     * @param x ： 窗口x位置
     * @param y ： 窗口y位置
     */
    void setWindowPos(int x, int y);

    /**
     * @brief 设置背景
     * 
     * @param filename ： 需要设置的背景图片
     */
    void setBackground(string filename);
};



#endif //__SDLWINDOW_H_